#pragma once

#include<vector>



namespace {
	
	struct Edge{
		int fromVertex;
		int toVertex;
		Edge(){}
		Edge(int fromVertex, int toVertex) : fromVertex(fromVertex), toVertex(toVertex) {}
	};

	bool operator < (const Edge& firstEdge, const Edge& secondEdge){
		if (firstEdge.fromVertex < secondEdge.fromVertex)
			return true;
		if (firstEdge.fromVertex > secondEdge.fromVertex)
			return false;
		return (firstEdge.toVertex < secondEdge.toVertex);
	}	
	
	bool operator == (const Edge& firstEdge, const Edge& secondEdge){
		if (firstEdge.fromVertex != secondEdge.fromVertex)
			return false;
		if (firstEdge.toVertex != secondEdge.toVertex)
			return false;
		return true;
	}

	class Graph{
	private:
		int vertexNum_;
	public:
		void setVertexNum(int newVertexNum){
			vertexNum_ = newVertexNum;
		}
		const int getVertexNum() const {
			return vertexNum_;
		}
		const virtual std::vector<int> getAdjacentList(int inputVertex) const = 0;
		virtual ~Graph(){}
	};

}

